/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package conexion;
import interfaces.ModeloPersonalizado;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author vikko
 */
public class Operaciones {
    ResultSetMetaData rsm= null;
    Conecta conexion =null;
    Statement st= null;
    ResultSet rs= null;
  //  ModeloPersonalizadoJTable mi_modelo;
    
    public Operaciones(){
        conexion= new Conecta();
        try{
            st = conexion.conx.createStatement();
        }catch(Exception e){
            System.out.println("Error al crear Statement");
	};
    }
    
    public int altaUsuario(String usuario, String password,String tipo){
        int res=0;
        try {            
            st.executeUpdate("INSERT INTO Usuario (Nombre,Password,Tipo_usuario) VALUES ('"+usuario+"','"+password+"','"+tipo+"')");
            res=1;   //El usuario fue dado de alta exitosamente
         //   st.close();
         //   System.out.println("Usuario dado de alta exitosamente");
            
        } catch (SQLException ex) {
            System.out.println("Error en INSERT: "+ex);
            if (Integer.parseInt(ex.getSQLState())==23000)
                res=-1;   //Si el usuario ya existe en la BD
        }
        return res;
    }
    
     public DefaultTableModel consultaTodosUsuarios(){
     String tipo= null;
     ModeloPersonalizado mi_modelo;
     String []titulos= {"Usuario","Contraseña","Tipo de usuario"};
     String []registro= new String[3];
     mi_modelo= new ModeloPersonalizado(null,titulos);
        try {
            rs=st.executeQuery("SELECT * FROM usuario");
            while(rs.next()==true){
    //        System.out.println(rs.getString("Nombre"));
    //        System.out.println(rs.getString("Password"));
    //        System.out.println(rs.getString("Tipo_usuario"));
    //        tipo= rs.getString("Tipo_usuario");
            
            registro[0]= rs.getString("nombre");
            registro[1]= rs.getString("password");
            registro[2]= rs.getString("tipo_usuario");
            mi_modelo.addRow(registro);
            mi_modelo.isCellEditable(0, 1);
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return mi_modelo;
    }
    
    public DefaultTableModel buscaUsuario(String user){
     String tipo= null;
     ModeloPersonalizado modelo;
     String []titulos= {"Usuario","Contraseña","Tipo de usuario"};
     String []registro= new String[3];
     modelo= new ModeloPersonalizado (null, titulos);
        try {
            rs=st.executeQuery("SELECT * FROM usuario WHERE nombre='"+user+"'");
            while(rs.next()==true){
            System.out.println(rs.getString("Nombre"));
            System.out.println(rs.getString("Password"));
            System.out.println(rs.getString("Tipo_usuario"));
            tipo= rs.getString("Tipo_usuario");
            
            registro[0]= rs.getString("nombre");
            registro[1]= rs.getString("password");
            registro[2]= rs.getString("tipo_usuario");
            modelo.addRow(registro);
            modelo.isCellEditable(0, 1);
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return modelo;
    }
    
    public String[] modificarUsuario(String user){      //Consulta la informacion del usuario y la resgresa como String []
     String tipo= null;
     DefaultTableModel modelo;
     String []titulos= {"Usuario","Contraseña","Tipo de usuario"};
     String []registro= new String[3];
     modelo= new DefaultTableModel(null, titulos);
        try {
            rs=st.executeQuery("SELECT * FROM usuario WHERE nombre='"+user+"'"); 
            while(rs.next()==true){
       //     System.out.println(rs.getString("Nombre"));
       //     System.out.println(rs.getString("Password"));
       //     System.out.println(rs.getString("Tipo_usuario"));
            tipo= rs.getString("Tipo_usuario");
            
            registro[0]= rs.getString("nombre");
            registro[1]= rs.getString("password");
            registro[2]= rs.getString("tipo_usuario");
            modelo.addRow(registro);
            
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return registro;
    }
    
    public int modificarUsuarioInserta(String usa,String usuario, String password,String tipo){
        int res=0;
        try {            
            st.executeUpdate("UPDATE Usuario SET Nombre='"+usuario+"', Password='"+password+"', Tipo_usuario='"+tipo+"' WHERE Nombre='"+usa+"'");
            res=1;   //El usuario fue dado de alta exitosamente
         //   st.close();
         //   System.out.println("Usuario dado de alta exitosamente");
            
        } catch (SQLException ex) {
            System.out.println("Error en INSERT: "+ex);
            if (Integer.parseInt(ex.getSQLState())==23000)
                res=-1;   //Si el usuario ya existe en la BD
        }
        return res;
    }
    
    public void eliminaUsuario(String user) {
         try{   
            st.executeUpdate("DELETE FROM Usuario WHERE nombre='"+user+"'");
         } catch(SQLException ex){
            System.out.println("Error al elimniar usuario: "+ex);
         }
    }
    
    public String consultaLogIn(String usuario, String pass){
    String tipo= null;
    try {
            rs=st.executeQuery("SELECT * FROM usuario WHERE nombre='"+usuario+"' && password='"+pass+"'");
            if(rs.next()==true){
         /*   System.out.println(rs.getString("Nombre"));
            System.out.println(rs.getString("Password"));
            System.out.println(rs.getString("Tipo_usuario"));*/
            tipo= rs.getString("Tipo_usuario");
            }           
        } catch (SQLException ex) {
            System.out.println("Error en Consulta: "+ex);
        }
    return tipo;
    }
    
    public String[] consultaProductoAlmacen(String tipo, String serie){
        ResultSetMetaData metaDatos;
        String []registro= new String [5];
        String descripcion="";     
        try {
            rs=st.executeQuery("SELECT * FROM "+tipo+" WHERE numero_serie= '"+serie+"'");
        
            metaDatos= rs.getMetaData();
            
           // Se obtiene el número de columnas.
            int numeroColumnas = metaDatos.getColumnCount();
            System.out.println("Número de columnas: "+numeroColumnas);
            // Se crea un array de etiquetas para rellenar
            Object[] etiquetas = new Object[numeroColumnas];
            //registro= new String[numeroColumnas];
            // Se obtiene cada una de las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++)
                {
                // Nuevamente, para ResultSetMetaData la primera columna es la 1. 
                etiquetas[i] = metaDatos.getColumnLabel(i + 1); 
                System.out.println(etiquetas[i]);
                }          
            
            while(rs.next()==true){                
                for(int j=1;j<etiquetas.length;j++){
                   descripcion+= rs.getString(etiquetas[j].toString())+"--";                   
                }
                registro[3]= descripcion;
                System.out.println("Su descripcion es: "+descripcion);              
            }      
            rs= st.executeQuery("SELECT numero_serie,marca,modelo,precio_sugerido FROM equipo WHERE numero_serie='"+serie+"'");
            while(rs.next()==true){
                registro[0]= rs.getString("numero_serie");
                registro[1]= rs.getString("marca");
                registro[2]= rs.getString("modelo");
                registro[4]= rs.getString("precio_sugerido");
            }
            
            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return registro;
    }       
  
    
    //De quí en adelante INSERTEN los metodos para trabajadar con la Base de Datos
    
       public int altaCliente(int clave,String nombre,String apellidos,String calle_num,String colonia,String ciudad,int cp,String rfc,String telefono,String email,String tipocliente){
        int res=0;
        try {            
            st.executeUpdate("INSERT INTO cliente (clave_cliente,nombre,apellidos,calle_num,colonia,ciudad,cod_postal,rfc,telefono,mail,tipo_cliente) VALUES ('"+clave+"','"+nombre+"','"+apellidos+"','"+calle_num+"','"+colonia+"','"+ciudad+"','"+cp+"','"+rfc+"','"+email+"','"+telefono+"','"+tipocliente+"')");
            res=1;   //El usuario fue dado de alta exitosamente
         //   st.close();
         //   System.out.println("Usuario dado de alta exitosamente");
            
        } catch (SQLException ex) {
            System.out.println("Error en INSERT: "+ex);
            if (Integer.parseInt(ex.getSQLState())==23000)
                res=-1;   //Si el usuario ya existe en la BD
        }
        return res;
    
    
    }
    
    public void eliminacliente(String user) {
         try{   
            st.executeUpdate("DELETE FROM cliente WHERE nombre='"+user+"'");
         } catch(SQLException ex){
            System.out.println("Error al elimniar usuario: "+ex);
         }
    }
    
     public DefaultTableModel buscacliente(String user){
     String tipo= null;
     ModeloPersonalizado modelo;
     String []titulos= {"clave","nombre","apellidos","calle y numero","colonia","ciudad","codigo_postal","RFC","telefono","mail","tipo de cliente"};
     String []registro= new String[11];
     modelo= new ModeloPersonalizado (null, titulos);
        try {
            rs=st.executeQuery("SELECT * FROM cliente WHERE nombre='"+user+"'");
            while(rs.next()==true){           
            tipo= rs.getString("tipo_cliente");
            
            registro[0]= rs.getString("clave_cliente");
            registro[1]= rs.getString("nombre");
            registro[2]= rs.getString("apellidos");
            registro[3]= rs.getString("calle_num");
            registro[4]= rs.getString("colonia");
            registro[5]= rs.getString("ciudad");
            registro[6]= rs.getString("cod_postal");
            registro[7]= rs.getString("rfc");
            registro[8]= rs.getString("telefono");
            registro[9]= rs.getString("mail");
            registro[10]= rs.getString("tipo_cliente");
            
            modelo.addRow(registro);
            modelo.isCellEditable(0, 1);
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return modelo;
    }
    
    public DefaultTableModel buscaClienteSimple(String user){
     String tipo= null;
     ModeloPersonalizado modelo;
     String []titulos= {"Clave","Nombre","Apellidos"};
     String []registro= new String[3];
     modelo= new ModeloPersonalizado (null, titulos);
        try {
            rs=st.executeQuery("SELECT clave_cliente, nombre, apellidos FROM cliente WHERE nombre='"+user+"'");
            while(rs.next()==true){                
                registro[0]= rs.getString("clave_cliente");
                registro[1]= rs.getString("nombre");           
                registro[2]= rs.getString("apellidos");           
                modelo.addRow(registro);
                modelo.isCellEditable(0, 1);
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return modelo;
    }
    
    public String buscaNombreEmpleado(String usuario){
    String nombre="";       
        try {
            rs=st.executeQuery("SELECT nombre FROM empleado WHERE nombre_usuario='"+usuario+"'");
            while(rs.next()==true){           
            nombre= rs.getString("nombre");            
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
        return nombre;
    }
    public DefaultTableModel consultaTodosClientesSimple(){
     String tipo= null;
     ModeloPersonalizado mi_modelo;
     String []titulos= {"Clave","Nombre","Apellidos"};
     String []registro= new String[3];
     mi_modelo= new ModeloPersonalizado(null,titulos);
        try {
            rs=st.executeQuery("SELECT clave_cliente, nombre, apellidos FROM cliente");
            while(rs.next()==true){           
                registro[0]= rs.getString("clave_cliente");
                registro[1]= rs.getString("nombre");
                registro[2]= rs.getString("apellidos");
                mi_modelo.addRow(registro);
                mi_modelo.isCellEditable(0, 1);
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return mi_modelo;
    }
    
    public String[] modificarcliente(String user){      //Consulta la informacion del usuario y la resgresa como String []
     String tipo= null;
     DefaultTableModel modelo;
     String []titulos= {"clave","nombre","apellidos","calle y numero","colonia","ciudad","codigo_postal","RFC","telefono","mail","tipo de cliente"};
     String []registro= new String[11];
     modelo= new DefaultTableModel(null, titulos);
        try {
            rs=st.executeQuery("SELECT * FROM cliente WHERE nombre='"+user+"'"); 
            while(rs.next()==true){
       //     System.out.println(rs.getString("Nombre"));
       //     System.out.println(rs.getString("Password"));
       //     System.out.println(rs.getString("Tipo_usuario"));
            tipo= rs.getString("tipo_cliente");
            
            registro[0]= rs.getString("clave_cliente");
            registro[1]= rs.getString("nombre");
            registro[2]= rs.getString("apellidos");
            registro[3]= rs.getString("calle_num");
            registro[4]= rs.getString("colonia");
            registro[5]= rs.getString("ciudad");
            registro[6]= rs.getString("cod_postal");
            registro[7]= rs.getString("rfc");
            registro[8]= rs.getString("telefono");
            registro[9]= rs.getString("mail");
            registro[10]= rs.getString("tipo_cliente");
            modelo.addRow(registro);
            
            }            
        } catch (SQLException ex) {
            System.out.println("Error en Consulta"+ex);
        }
    return registro;
    }
    public int altaEmpleado(int codigo, String nombre, String apellidos, String callenum, String colonia,String ciudad, int codpos, String telefono, String fechaingreso,  int sueldo, String fotografia){
    
        int res=0;
        try {            
            st.executeUpdate("INSERT INTO Empleado (codigo_empleado,nombre,apellidos,calle_num,colonia,ciudad,cp,telefono,fecha_ingreso,sueldo,fotografia) VALUES ('"+codigo+"','"+nombre+"','"+apellidos+"','"+callenum+"','"+colonia+"','"+ciudad+"',"+codpos+",'"+telefono+"','"+fechaingreso+"',"+sueldo+",'"+fotografia+"')");
            res=1;   //El usuario fue dado de alta exitosamente
         //   st.close();
         //   System.out.println("Usuario dado de alta exitosamente");
            
        } catch (SQLException ex) {
            System.out.println("Error en INSERT: "+ex);
            if (Integer.parseInt(ex.getSQLState())==23000)
                res=-1;   //Si el usuario ya existe en la BD
        }
        return res;
    }
    
    public int altaInventario(int numero_Inventario,String fecha_inventario,String relacion,String numero_empleado){
        int res=0;
        try {            
            st.executeUpdate("INSERT INTO inventario (numero_Inventario,fecha_inventario,relacion,numero_empleado) VALUES ('"+numero_empleado+"','"+fecha_inventario+"','"+relacion+"','"+numero_empleado+"')");
            res=1;   //El usuario fue dado de alta exitosamente
         //   st.close();
         //   System.out.println("Usuario dado de alta exitosamente");
            
        } catch (SQLException ex) {
            System.out.println("Error en INSERT: "+ex);
            if (Integer.parseInt(ex.getSQLState())==23000)
                res=-1;   //Si el usuario ya existe en la BD
        }
        return res;    
    }
}
